package com.Algorithm.HUAWEI.four20220505;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/06/14/10:35
 * @Description:
 * @Target:
 */
public class 公共子串计算 {
    /*
    *
    * 给定两个只包含小写字母的字符串，计算两个字符串的最大公共子串的长度。

        注：子串的定义指一个字符串删掉其部分前缀和后缀（也可以不删）后形成的字符串。
        数据范围：字符串长度：1≤s≤150
        进阶：时间复杂度：O(n^3)
       ，空间复杂度：O(n)
        输入描述：
        输入两个只包含小写字母的字符串

        输出描述：
        输出一个整数，代表最大公共子串的长度

        示例1
        输入：
        asdfas
        werasdfaswer
        复制
        输出：
        6

    * */


    public static void main(String[] args) throws Exception{
        // 求最大公共子串，分治法。---在某一时刻开始有公共的，然后从开始的时候持续增加
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String ss1 = in.readLine();
        String ss2 = in.readLine();

        Dp(ss1.toCharArray(),ss2.toCharArray());
    }



    static void Dp(char[] a,char[] b){
        int[][] LCS = new int[2][b.length+1];
        int max = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i]==b[j]){
                    LCS[1][j+1] = LCS[0][j]+1;
                    max = Math.max(LCS[1][j+1],max);
                }else {
                    LCS[1][j+1] = 0;
                }
            }

            for (int j = 0; j < b.length; j++) {
                LCS[0][j] = LCS[1][j];
            }

        }

        System.out.println(max);

/*
        for (int i = 0; i < LCS.length; i++) {
            for (int j = 0; j < LCS[0].length; j++) {
                System.out.print(LCS[i][j]+" ");
            }
            System.out.println();
        }*/

    }


    }



    
